在GPU实例上配置eRDMA

GPU实例绑定弹性RDMA网卡(ERI)后,各GPU实例间在VPC网络下可以实现RDMA直通加速互连,相比传统的RDMA,eRDMA可以提供更高效的数据传输服务,有效提升GPU实例之间的通信效率并缩短任务处理时间。本文介绍如何在GPU实例上配置eRDMA。

使用限制

限制项

说明

实例规格

支持ERI的实例规格如下:

  • ebmgn7ex、ebmgn7ix

  • gn8is、ebmgn8is、gn8v、ebmgn8v

镜像

支持以下镜像(任选一款):

  • (推荐)Alibaba Cloud Linux 3

  • CentOS 8.5/8.4/7.9

  • Ubuntu 22.04/20.04/18.04

eRDMA设备数量

  • gn8isgn8v实例规格族仅支持1eRDMA网卡设备。

  • ebmgn7ix、ebmgn7ex、 ebmgn8is以及ebmgn8v弹性裸金属实例支持2eRDMA网卡设备。

网络限制

  • 网卡开启弹性RDMA接口后,不支持分配IPv6地址。

  • 两个实例之间通过ERI通信,通信链路中间不支持跨网元设备(例如负载均衡SLB等)。

操作步骤

支持eRDMA能力的实例使能eRDMA能力需满足2个条件:安装了eRDMA软件栈绑定了开启弹性RDMA接口的网卡

购买实例时配置eRDMA

  1. 前往实例购买页

  2. 创建支持ERIGPU实例。

    创建过程中需注意以下配置项(其他参数,请参见自定义购买实例):

    • 实例规格:请参见使用限制,本示例以ebmgn7exebmgn8is为例。

    • 镜像:选择公共镜像时,默认同时选中安装GPU驱动安装eRDMA软件栈选项,则该实例创建完成后,系统会自动在实例内部安装GPU驱动、CUDA、cuDNN以及eRDMA软件栈。

      镜像选择.jpg

      使能弹性RDMA网卡(ERI)的注意事项

      • 公共镜像页签下,如果选择了支持安装eRDMA软件栈的镜像操作系统及版本(即可选中安装eRDMA软件栈选项),但实际并未选中安装eRDMA软件栈选项,则实例创建后您可通过脚本安装或手动安装方式安装eRDMA软件栈,来使能eRDMA网卡。

      • 公共镜像页签下,如果选择了不支持安装eRDMA软件栈的镜像操作系统及版本(即无法选中安装eRDMA软件栈选项),则实例创建后您无法通过脚本安装方式或手动安装方式来启动并使用eRDMA网卡。

      • 公共镜像页签下,如果取消安装eRDMA软件栈选项,则您可以选择更多的镜像操作系统及版本。

    • 弹性网卡:创建GPU实例过程中,在带宽和安全组配置向导页面配置弹性网卡时,会默认创建一块eRDMA主网卡和一块eRDMA辅助网卡,并且主网卡和辅助网卡右侧的弹性RDMA接口选项会默认被自动选中。

      弹性网卡.jpg

      说明
      • GPU实例运行后不支持单独启用或关闭某一弹性网卡的弹性RDMA能力。

      • 开启了弹性RDMA能力后的2张网卡会自动绑定到不同的通道上,无需您单独指定。

      • 主网卡不支持从GPU实例中解绑,只能随GPU实例一起创建和释放。

  3. 进入已创建的实例详情页,单击弹性网卡页签,查看实例网卡类型。

    主网卡或辅助网卡的网卡类型如下所示,表示该实例已开启了弹性RDMA接口的网卡。

    主辅助弹性网卡.jpg

为已有GPU实例配置eRDMA

  1. 登录ECS管理控制台

  2. 找到目标实例并进入实例详情页,选择弹性网卡页签,查看实例是否已开启了弹性RDMA接口的网卡。

    弹性网卡.jpg

    • 如果已开启,请跳过以下步骤。

    • 如果未开启,请按照以下步骤,为主网卡或者辅助弹性网卡配置eRDMA。

  3. 为主网卡或辅助弹性网卡配置eRDMA。

    说明
    • 创建GPU实例时,如果主网卡和辅助网卡均未选中弹性RDMA接口,则创建实例后,您可以再单独创建并启用2eRDMA辅助弹性网卡。

    • 创建GPU实例时,如果主网卡或辅助网卡其中一个网卡未选中弹性RDMA接口,则创建实例后,您只能再单独创建并启用1eRDMA辅助弹性网卡。

    • 为主网卡配置eRDMA

      通过OpenAPI方式为主网卡配置eRDMA。具体操作,请参见ModifyNetworkInterfaceAttribute - 修改弹性网卡属性

      主要配置项说明

      参数

      说明

      RegionId

      主网卡所在地域ID。

      NetworkInterfaceId

      主网卡的ID。

      NetworkInterfaceTrafficMode

      设置主网卡的通讯模式。取值范围:

      • Standard:使用TCP通讯模式。

      • HighPerformance:开启ERI(Elastic RDMA Interface)接口,使用RDMA通讯模式。

      本步骤选择HighPerformance模式。

    • 为辅助弹性网卡配置eRDMA

      通过控制台方式创建和挂载eRDMA网卡到GPU实例时,不支持绑定到不同通道,这会导致2eRDMA网卡总带宽减少一半,故建议您使用OpenAPI的方式挂载eRDMA网卡。

      (推荐)OpenAPI方式

      • 方式一:创建并绑定弹性RDMA网卡

        每个GPU实例最多支持2eRDMA网卡,且需要分别通过NetworkCardIndex参数绑定到不同的通道上。

        1. 创建弹性RDMA网卡。

          具体操作,请参见CreateNetworkInterface

          主要参数说明

          参数

          说明

          RegionId

          待创建弹性网卡所属地域ID。

          VSwitchId

          指定VPC的交换机ID。弹性网卡的私网IP地址在交换机的IP地址段内的空闲地址中取值。

          SecurityGroupId

          加入一个安全组。安全组和弹性网卡必须在同一个专有网络VPC中。

          NetworkInterfaceTrafficMode

          弹性网卡的通讯模式。取值范围:

          • Standard:使用TCP通讯模式。

          • HighPerformance:开启ERI(Elastic RDMA Interface)接口,使用RDMA通讯模式。

          本步骤选择HighPerformance模式。

          调用成功后,请记录返回数据中生成的弹性网卡ID(即NetworkInterfaceId对应的返回值)。

        2. 绑定eRDMA弹性网卡。

          具体操作,请参见AttachNetworkInterface

          主要参数说明

          参数

          说明

          RegionId

          实例所在地域的ID。

          NetworkInterfaceId

          弹性网卡ID,即已创建的弹性RDMA网卡。

          InstanceId

          实例ID。

          NetworkCardIndex

          网卡指定的物理网卡索引。

          创建弹性RDMA网卡时,在绑定到某个实例时需要您手动指定通道(即物理网卡索引),当前通道可以指定为01(2张弹性RDMA指定不同的值)。

          说明

          为了获取最大网络带宽,您需要指定2RDMA网卡绑定到不同的通道。

          调用成功(即挂载成功)后,在GPU实例的弹性网卡页签下,您可以看到挂载的弹性RDMA网卡。弹性网卡

      • 方式二:修改已有弹性网卡属性

        说明

        该方式不支持指定NetworkCardIndex参数(即网卡指定的物理网卡索引),如果同时绑定两张RDMA网卡,采用该方式为辅助弹性网卡配置eRDMA可能会导致最大带宽达不到要求。

        具体操作,请参见ModifyNetworkInterfaceAttribute - 修改弹性网卡属性

        主要配置项说明

        参数

        说明

        RegionId

        辅助网卡所在地域ID。

        NetworkInterfaceId

        辅助网卡的ID。

        NetworkInterfaceTrafficMode

        设置辅助网卡的通讯模式。取值范围:

        • Standard:使用TCP通讯模式。

        • HighPerformance:开启ERI(Elastic RDMA Interface)接口,使用RDMA通讯模式。

        本步骤选择HighPerformance模式。

        调用成功(即挂载成功)后,在GPU实例的弹性网卡页签下,您可以看到挂载的弹性RDMA网卡。

        网卡类型.jpg

      控制台方式

      1. 创建辅助弹性网卡。

        具体操作,请参见创建辅助弹性网卡。在创建并启用ERI的辅助弹性网卡时,启动增加弹性RDMA接口开关。ERI会共用该辅助弹性网卡的设置,包括弹性网卡的IP、应用于弹性网卡的安全组规则等。弹性网卡

      2. 将辅助弹性网卡绑定至GPU实例。

        具体操作,请参见绑定辅助弹性网卡

        说明

        单台实例最多绑定2个启用ERI的辅助弹性网卡。

        将启用ERI的辅助弹性网卡绑定至GPU实例后,如需解绑,必须先停止该实例。具体操作,请参见停止实例

      3. 远程连接GPU实例。

        具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

      4. 执行ifconfig命令,查看新绑定的服务弹性网卡是否存在。

        如未显示新绑定的辅助弹性网卡,请手动配置该网卡,具体操作,请参见配置辅助弹性网卡。否则,请跳过该步骤。

        说明

        部分镜像可能无法自动识别新绑定的辅助弹性网卡,您需要在实例内配置辅助弹性网卡。

  4. (可选)在实例内使能弹性RDMA网卡(ERI)。

    如果选择公共镜像时未选中安装eRDMA软件栈选项,根据实际情况选择脚本方式或者手动方式安装eRDMA软件栈,来使能弹性RDMA网卡(ERI)。

    • 脚本安装方式

      GPU实例创建完成后,您可以通过脚本安装方式单独安装eRDMA软件栈、GPU驱动、CUDA以及cuDNN等软件,脚本示例如下所示。

      #!/bin/sh
      
      #Please input version to install
      DRIVER_VERSION="550.90.07"
      CUDA_VERSION="12.4.1"
      CUDNN_VERSION="9.2.0.82"
      IS_INSTALL_eRDMA="TRUE"
      IS_INSTALL_RDMA="FALSE"
      INSTALL_DIR="/root/auto_install"
      
      #using .run to install driver and cuda
      auto_install_script="auto_install_v4.0.sh"
      
      script_download_url=$(curl http://100.100.100.200/latest/meta-data/source-address | head -1)"/opsx/ecs/linux/binary/script/${auto_install_script}"
      echo $script_download_url
      
      rm -rf $INSTALL_DIR
      mkdir -p $INSTALL_DIR
      cd $INSTALL_DIR && wget -t 10 --timeout=10 $script_download_url && bash ${INSTALL_DIR}/${auto_install_script} $DRIVER_VERSION $CUDA_VERSION $CUDNN_VERSION $IS_INSTALL_RDMA $IS_INSTALL_eRDMA
    • 手动安装方式

      GPU实例创建完成后,您可以通过手动安装方式单独安装OFED驱动、eRDMA驱动、GPU驱动以及加载nv_peer_mem服务组件,具体操作如下所示。

      1. 远程连接GPU实例。

        具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

      2. 安装OFED驱动。

        1. 执行以下命令,安装依赖软件包。

          Alibaba Cloud Linux 3

          sudo yum install perl-generators python3-Cython kernel-rpm-macros libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y

          CentOS 8.5/8.4/7.9

          • CentOS 8.5/8.4

            wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/centos8/python3-Cython-0.29.32-3.16.x86_64.rpm
            yum install python3-Cython-0.29.32-3.16.x86_64.rpm -y
            yum install kernel-rpm-macros perl-generators libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y
          • CentOS 7.9

            sudo yum install  python-devel python3-Cython kernel-rpm-macros perl-generators libmnl-devel valgrind-devel rpm-build systemd-devel libdb-devel iptables-devel lsof elfutils-devel bison libnl3-devel libselinux-devel flex cmake numactl-devel -y

          Ubuntu 22.04/20.04/18.04

          • Ubuntu 22.04

            sudo apt-get update
            sudo apt-get install -y pkg-config
            sudo apt install -y python3-distutils libmnl-dev bison sudo flex dh-python quilt python3 dpatch swig libelf-dev libdb-dev libselinux1-dev gcc chrpath graphviz make
          • Ubuntu 20.04

            sudo apt-get update
            sudo apt-get install -y pkg-config
            sudo apt-get install quilt swig gcc dh-python python3 chrpath bison sudo flex graphviz libmnl-dev python3-distutils make libdb-dev libselinux1-dev dpatch libelf-dev -y
          • Ubuntu 18.04

            sudo apt-get update
            sudo apt-get install -y pkg-config
            sudo apt install -y make dh-python libdb-dev libselinux1-dev flex dpatch swig graphviz chrpath quilt python3-distutils bison libmnl-dev libelf-dev gcc sudo python3
        2. 执行以下命令,下载OFED软件包配置文件。

          Alibaba Cloud Linux 3

          sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz
          sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/
          sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf
          sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm
          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm  -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm

          CentOS 8.5/8.4/7.9

          • CentOS 8.5/8.4

            cd /root
            wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz
            tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/
            wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf
            rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm
            wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm  -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm
          • CentOS 7.9

            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-5.4-3.5.8.0.tgz
            sudo tar -xvf MLNX_OFED_SRC-5.4-3.5.8.0.tgz && cd MLNX_OFED_SRC-5.4-3.5.8.0/
            sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/alibaba_cloud3/3/ofed_alibaba_cloud3.conf
            sudo rm -rf SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.src.rpm
            sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm  -O SRPMS/mlnx-ofa_kernel-5.4-OFED.5.4.3.5.8.1.egs.1.src.rpm

          Ubuntu 22.04/20.04/18.04

          sudo wget http://mirrors.cloud.aliyuncs.com/opsx/ecs/linux/binary/erdma/ofed/MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz
          sudo tar -xvf MLNX_OFED_SRC-debian-5.4-3.6.8.1.tgz && cd MLNX_OFED_SRC-5.4-3.6.8.1 && curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf
          sudo rm -rf SOURCES/mlnx-ofed-kernel_5.4.orig.tar.gz
          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/mlnx-ofed-kernel_5.4.egs.orig.tar.gz -O SOURCES/mlnx-ofed-kernel_5.4.egs.orig.tar.gz
        3. 根据不同系统,执行相应命令安装OFED驱动。

          Alibaba Cloud Linux 3

          sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8
          sudo dracut -f

          CentOS 8.5/8.4/7.9

          • CentOS 8.5/8.4

            ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL8 
          • CentOS 7.9

            sudo ./install.pl --config ./ofed_alibaba_cloud3.conf --distro RHEL7 

          Ubuntu 22.04/20.04/18.04

          sudo curl -O http://mirrors.cloud.aliyuncs.com/erdma/kernel-fix/deb/ofed_debian.conf
          sudo ./install.pl --config ./ofed_debian.conf --without-dkms --build-only --kernel-only 
          sudo /usr/bin/dpkg -i --force-confmiss DEBS/ubuntu${VERSION_ID}/x86_64/*.deb
          说明

          上述代码中,${VERSION_ID}表示Ubuntu系统版本,例如22.04、20.0418.04。

        4. 执行以下命令,确认/usr/src/ofa_kernel/`uname -r`目录是否存在。

          • 目录存在,则直接执行下一步。

            ls /usr/src/ofa_kernel/`uname -r`
          • 目录不存在,则先执行以下命令创建软链接,再执行下一步。

            sudo ln -s /usr/src/ofa_kernel/default /usr/src/ofa_kernel/`uname -r`
        5. 重启实例。

          OFED驱动安装完成后,您需要重启实例,确保新的内核模块生效。具体操作,请参见重启实例

      3. 安装eRDMA驱动。

        1. 执行以下命令,下载并安装eRDMA驱动。

          sudo wget http://mirrors.cloud.aliyuncs.com/erdma/env_setup.sh
          sudo bash env_setup.sh --egs
        2. 执行以下命令,通过eadm工具确认eRDMA驱动是否正常安装。

          eadm ver

          返回结果如下所示,表示驱动已正常安装。driver

          说明

          本示例以驱动版本为0.2.35为例。如果返回结果提示没有本命令或者执行失败,请您重新安装eRDMA驱动。

      4. 安装GPU驱动。

        具体操作,请参见GPU计算型实例中手动安装Tesla驱动(Linux)

      5. 加载nv_peer_mem服务组件。

        • (推荐)GPU驱动为470.xx.xx及以上版本

          使能GPU Direct RDMA需要加载nv_peer_mem服务组件,建议使用470.xx.xx及以上版本的GPU驱动,因为NVIDIA在驱动版本为470.xx.xx及以上版本中已预装了该服务组件。您可以直接按照以下步骤加载nvidia_peermem模块。

          sudo modprobe nvidia_peermem
          # 可通过lsmod|grep nvidia检查是否已成功加载nvidia_peermem
          说明

          如果机器重启后,您需要重新加载nvidia_peermem模块。

        • GPU驱动为470.xx.xx以下版本

          您需要手动下载并安装相应服务组件,下载及编译安装方法如下所示。

          sudo git clone https://github.com/Mellanox/nv_peer_memory.git
          # 编译并安装nv_peer_mem.ko
          cd nv_peer_memory && make
          cp nv_peer_mem.ko /lib/modules/$(uname -r)/kernel/drivers/video
          depmod -a
          modprobe nv_peer_mem
          # 可通过lsmod|grep nv_peer_mem检查
          service nv_peer_mem start
  1. 带宽验证。

    1. 远程连接GPU实例。

      具体操作,请参见使用Workbench工具以SSH协议登录Linux实例

    2. 执行以下命令,检查2eRDMA网卡是否正常。

      sudo ibv_devinfo

      eRDMA驱动安装脚本默认安装最新版本的驱动,如果您需要安装旧版本eRDMA驱动,请提交工单获取帮助。

      本文以eRDMA驱动为0.2.37或以上版本为例,显示结果如下所示,表示2eRDMA网卡正常存在。其中,2eRDMA设备的端口state均为PORT_ACTIVE时,表示eRDMA网卡状态正常。

      网卡.jpg

      说明

      如果eRDMA设备的端口stateinvalid state时,则表示该eRDMA网卡状态异常,建议先检查辅助网卡是否配置正确。例如,通过执行ifconfig命令查看所有网卡配置是否存在,以及所有网卡IP地址是否存在。

    3. 执行以下命令,安装perftest测试工具。

      sudo yum install perftest -y
    4. 执行以下命令,测试RDMA网络带宽是否符合对应硬件的预期表现。

      1. Server端执行以下命令,等待Client端的连接请求。

        sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515
      2. Client端执行以下命令,发送连接请求和数据包。

        sudo ib_write_bw -d erdma_0 -F -q 16 --run_infinitely --report_gbits -p 18515 server_ip

        其中,server_ipServerECS实例上绑定eRDMA的弹性网卡所对应的私有IP地址。获取IP地址的方法,请参见查看IP地址

      说明

      上述perftest测试使用了1张网卡通信,如果您业务需要启用2张网卡进行通信,则需要同时启动2perftest进程,并通过-d参数为2个进程各指定1eRDMA网卡、-p参数指定不同的通信端口。更多信息,请参见perftest详情

      测试结果包括平均带宽,系统返回信息如下,表示eRDMA通信正常。

      回显信息详情

      ---------------------------------------------------------------------------------------
                          RDMA_Write BW Test
       Dual-port       : OFF          Device         : erdma_0
       Number of qps   : 16           Transport type : IB
       Connection type : RC           Using SRQ      : OFF
       PCIe relax order: ON
       ibv_wr* API     : OFF
       TX depth        : 128
       CQ Moderation   : 1
       Mtu             : 1024[B]
       Link type       : Ethernet
       GID index       : 1
       Max inline data : 0[B]
       rdma_cm QPs     : OFF
       Data ex. method : Ethernet
      ---------------------------------------------------------------------------------------
       local address: LID 0000 QPN 0x0002 PSN 0xa66b22 RKey 0x000100 VAddr 0x007f09922fd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0003 PSN 0x3b9364 RKey 0x000100 VAddr 0x007f099230d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0004 PSN 0x6b1ade RKey 0x000100 VAddr 0x007f099231d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0005 PSN 0x8c83d5 RKey 0x000100 VAddr 0x007f099232d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0006 PSN 0x1335c4 RKey 0x000100 VAddr 0x007f099233d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0007 PSN 0xc451d6 RKey 0x000100 VAddr 0x007f099234d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0008 PSN 0x4edd7d RKey 0x000100 VAddr 0x007f099235d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0009 PSN 0x93d832 RKey 0x000100 VAddr 0x007f099236d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000a PSN 0x16d2ee RKey 0x000100 VAddr 0x007f099237d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000b PSN 0x6820d8 RKey 0x000100 VAddr 0x007f099238d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000c PSN 0x9419c RKey 0x000100 VAddr 0x007f099239d000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000d PSN 0xedd7ff RKey 0x000100 VAddr 0x007f09923ad000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000e PSN 0x70ff7f RKey 0x000100 VAddr 0x007f09923bd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x000f PSN 0x8ccc0 RKey 0x000100 VAddr 0x007f09923cd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0010 PSN 0x33327e RKey 0x000100 VAddr 0x007f09923dd000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       local address: LID 0000 QPN 0x0011 PSN 0x9b836a RKey 0x000100 VAddr 0x007f09923ed000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:146
       remote address: LID 0000 QPN 0x0002 PSN 0x651666 RKey 0x000100 VAddr 0x007f5011099000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0003 PSN 0xf99758 RKey 0x000100 VAddr 0x007f50110a9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0004 PSN 0xd001c2 RKey 0x000100 VAddr 0x007f50110b9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0005 PSN 0x23aae9 RKey 0x000100 VAddr 0x007f50110c9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0006 PSN 0xfad148 RKey 0x000100 VAddr 0x007f50110d9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0007 PSN 0xca210a RKey 0x000100 VAddr 0x007f50110e9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0008 PSN 0xe0cea1 RKey 0x000100 VAddr 0x007f50110f9000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0009 PSN 0x8ddc86 RKey 0x000100 VAddr 0x007f5011109000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000a PSN 0xde22b2 RKey 0x000100 VAddr 0x007f5011119000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000b PSN 0x9f2f4c RKey 0x000100 VAddr 0x007f5011129000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000c PSN 0x66a100 RKey 0x000100 VAddr 0x007f5011139000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000d PSN 0x934d93 RKey 0x000100 VAddr 0x007f5011149000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000e PSN 0xf70783 RKey 0x000100 VAddr 0x007f5011159000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x000f PSN 0xfdce74 RKey 0x000100 VAddr 0x007f5011169000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0010 PSN 0xfca422 RKey 0x000100 VAddr 0x007f5011179000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
       remote address: LID 0000 QPN 0x0011 PSN 0xaa3e3e RKey 0x000100 VAddr 0x007f5011189000
       GID: 00:00:00:00:00:00:00:00:00:00:255:255:192:168:01:149
      ---------------------------------------------------------------------------------------
       #bytes     #iterations    BW peak[Gb/sec]    BW average[Gb/sec]   MsgRate[Mpps]
       65536      910045           0.00               95.42              0.182003

测试验证

为测试和验证配备eRDMA网络的GPU实例在应用中的实际表现,本文以nccl-tests为例,展示如何在实际业务中使用eRDMA的具体操作。关于nccl-tests的更多信息,请参见nccl-tests

  1. 执行以下命令,安装NCCL。

    通过下载并编译源码安装NCCL,源码编译的方式如下:

    说明

    您也可以在NVIDIA官网NVIDIA NCCL下载安装包,然后进行安装。

    # build nccl
    cd /root
    git clone https://github.com/NVIDIA/nccl.git
    cd nccl/
    make -j src.lib PREFIX=/usr/local/nccl
    make install PREFIX=/usr/local/nccl
    # 通过ls /usr/local/nccl/lib查看libnccl.so
  2. 执行以下命令,安装OpenMPI及编译器。

    wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.3.tar.gz
    tar -xzf openmpi-4.1.3.tar.gz
    cd openmpi-4.1.3
    ./configure --prefix=/usr/local/openmpi
    make -j && make install
  3. 执行以下命令,设置环境变量。

    NCCL_HOME=/usr/local/nccl
    CUDA_HOME=/usr/local/cuda
    MPI_HOME=/usr/local/openmpi
    
    export LD_LIBRARY_PATH=${NCCL_HOME}/lib:${CUDA_HOME}/lib64:${MPI_HOME}/lib:$LD_LIBRARY_PATH
    export PATH=${CUDA_HOME}/bin:${MPI_HOME}/bin:$PATH

    在实例内部进入~/.bashrc文件、设置PATHLD_LIBRARY_PATH,其中,NCCL_HOME、CUDA_HOME、MPI_HOME需要根据实际情况填写。编辑完成后,执行以下命令使环境变量设置生效。

    source ~/.bashrc
  4. 执行以下命令,下载并编译测试代码。

    git clone https://github.com/NVIDIA/nccl-tests
    cd nccl-tests/
    make MPI=1 CUDA_HOME=/usr/local/cuda MPI_HOME=/usr/local/openmpi
  5. 执行以下命令,建立实例之间的SSH互信。

    host1生成公钥后并拷贝到host2上以建立实例之间的SSH互信。

    #在host1执行
    ssh-keygen
    ssh-copy-id -i ~/.ssh/id_rsa.pub ${host2}
    
    ssh root@{host2}   # 在host1执行,测试一下是否可以无密码连接host2。如果是,表示已建立实例之间的SSH互信。
  6. 执行如下命令,测试NCCL all_reduce效果。

    # 将host1, host2替换为您对应的IP地址
    mpirun --allow-run-as-root -np 16 -npernode 8 -H host1:8,host2:8 \
    --bind-to none \
    -mca btl_tcp_if_include eth0 \
    -x NCCL_SOCKET_IFNAME=eth0 \
    -x NCCL_DEBUG=INFO \
    -x LD_LIBRARY_PATH \
    -x PATH \
    ./build/all_reduce_perf -b 4M -e 4M -f 2 -g 1 -t 1 -n 20

相关文档

  • 在企业级ECS实例上配置eRDMA,可实现无需更改业务组网,即可在原有网络下体验超低延迟、大吞吐、高弹性的高性能RDMA网络服务。具体操作,请参见在企业级实例上使用eRDMA

  • 容器中需要大规模数据传输和高性能网络通信的应用场景中,将eRDMA功能引入容器(Docker)环境可实现容器应用程序绕过操作系统内核直接访问主机的物理eRDMA设备,从而提供更快的数据传输和通信效率。具体操作,请参见在容器(Docker)中使用eRDMA

  • 如需监测或诊断eRDMA,方便您对eRDMA的运行状态进行实时监控。具体操作,请参见监测和诊断eRDMA